home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGNG_C
/
SDB.LZH
/
SDBIO.H
< prev
next >
Wrap
Text File
|
1984-01-10
|
8KB
|
224 lines
/* SDB - definition file */
#include "ctype.h" /*dns*/
/* compiler specific stuff (dns) */
#define Lattice
/* useful definitions */
#define TRUE 1
#define FALSE 0
#ifndef NULL
#define NULL 0
#endif
/* Character definitions (dns) */
#define BS 0x8 /*dns*/
#define CR 0xD /*dns*/
#define FF 0xC /*dns*/
#define ESC 0x1B /*dns*/
/* program limits */
#define LINEMAX 132 /* maximum input line length */
#define TABLEMAX 132 /* maximum table output line */
#define KEYWORDMAX 10 /* maximum keyword length */
#define NUMBERMAX 20 /* maximum number length */
#define STRINGMAX 132 /* maximum string length */
#define CODEMAX 100 /* maximum length of code array */
#define STACKMAX 20 /* maximum interpreter stack size */
/* token definitions */
#define EOS 0
#define LSS -1
#define LEQ -2
#define EQL -3
#define NEQ -4
#define GEQ -5
#define GTR -6
#define SELECT -7
#define FROM -8
#define WHERE -9
#define CREATE -10
#define DELETE -11
#define INSERT -12
#define EXIT -13
#define CHAR -14
#define NUM -15
#define ID -16
#define STRING -17
#define NUMBER -18
#define UPDATE -19
#define PRINT -20
#define IMPORT -21
#define EXPORT -22
#define INTO -23
#define HELP -24
#define COMPRESS -25
#define EXTRACT -26
#define DEFINE -27
#define SHOW -28
#define USING -29
#define SORT -30
#define BY -31
#define ASCENDING -32
#define DESCENDING -33
#define SET -34
/* operand types */
#define LITERAL 1
#define ATTR 2
#define TEMP 3
/* attribute data types */
#define TCHAR 1
#define TNUM 2
/* tuple status codes */
#define UNUSED 0
#define ACTIVE 1
#define DELETED 2
/* relation header page format definitions */
#define RNSIZE 10 /* size of a relation name */
#define HSIZE 16 /* size of a relation entry */
#define ASIZE 16 /* size of a attribute entry */
#define ANSIZE 10 /* size of a attribute name */
#define NATTRS 31 /* number of attributes in header block */
/* error code definitions */
#define END 0 /* end of retrieval set */
#define INSMEM 1 /* insufficient memory */
#define RELFNF 2 /* relation file not found */
#define BADHDR 3 /* bad relation file header */
#define TUPINP 4 /* tuple input error */
#define TUPOUT 5 /* tuple output error */
#define RELFUL 6 /* relation file full */
#define RELCRE 7 /* error creating relation file */
#define DUPATT 8 /* duplicate attribute on relation create */
#define MAXATT 9 /* too many attributes on relation create */
#define INSBLK 10 /* insufficient disk blocks */
#define SYNTAX 11 /* command syntax error */
#define ATUNDF 12 /* attribute name undefined */
#define ATAMBG 13 /* attribute name ambiguous */
#define RLUNDF 14 /* relation name undefined */
#define CDSIZE 15 /* boolean expression code too big */
#define INPFNF 16 /* input file not found */
#define OUTCRE 17 /* output file creation error */
#define INDFNF 18 /* indirect command file not found */
#define BADSET 19 /* bad set parameter */
struct attribute {
char at_name[ANSIZE]; /* attribute name */
char at_type; /* attribute type */
char at_size; /* attribute size in bytes */
char at_scale; /* attribute scale factor (for numeric only) */
char at_unused[ASIZE-ANSIZE-3]; /* unused space */
};
struct header { /* sizeof(struct header) must be 512 bytes */
char hd_tcnt[2]; /* # of tuples in relation */
char hd_tmax[2]; /* maximum # of tuples */
char hd_data[2]; /* offset to first data byte */
char hd_size[2]; /* size of each tuple in bytes */
char hd_unused[HSIZE-8]; /* unused space */
struct attribute hd_attrs[NATTRS]; /* table of attributes */
};
struct relation {
char rl_name[RNSIZE]; /* relation name */
unsigned int rl_tcnt; /* # of tuples in relation (from hd_tcnt) */
unsigned int rl_tmax; /* maximum # of tuples (from hd_tmax) */
int rl_data; /* offset to first data byte (from hd_data) */
int rl_size; /* size of eachtuple in bytes (from hd_size) */
int rl_store; /* flag indicating a store happened */
int rl_fd; /* file descriptor for relation file */
int rl_scnref; /* number of scans referencing this relation */
struct header rl_header; /* the relation file header block */
struct relation *rl_next; /* pointer to next relation */
};
struct scan {
struct relation *sc_relation; /* pointer to relation definition */
unsigned int sc_dtnum; /* desired tuple number */
unsigned int sc_atnum; /* actual tuple number */
int sc_store; /* flag indicating a store happened */
char *sc_tuple; /* tuple buffer */
};
struct srel {
char *sr_name; /* alternate relation name */
struct scan *sr_scan; /* relation scan structure ptr */
int sr_ctuple; /* current tuple flag */
int sr_update; /* updated tuple flag */
struct srel *sr_next; /* next selected relation in list */
};
struct sattr {
char *sa_rname; /* relation name */
char *sa_aname; /* attribute name */
char *sa_name; /* alternate attribute name */
char *sa_aptr; /* pointer to attr in tuple buffer */
struct srel *sa_srel; /* pointer to the selected relation */
struct attribute *sa_attr; /* attribute structure ptr */
struct sattr *sa_next; /* next selected attribute in list */
};
struct operand {
int o_type;
union {
struct {
int ovc_type;
char *ovc_string;
int ovc_length;
} ov_char;
int ov_boolean;
} o_value;
};
union codecell {
int (*c_operator)();
struct operand *c_operand;
};
struct binding {
struct attribute *bd_attr; /* bound attribute */
char *bd_vtuple; /* pointer to value in tuple */
char *bd_vuser; /* pointer to user buffer */
struct binding *bd_next; /* next binding */
};
struct sel {
struct srel *sl_rels; /* selected relations */
struct sattr *sl_attrs; /* selected attributes */
union codecell *sl_where; /* where clause */
struct binding *sl_bindings; /* user variable bindings */
};
struct mtext {
char *mt_text;
struct mtext *mt_next;
};
struct macro {
char *mc_name;
struct mtext *mc_mtext;
struct macro *mc_next;
};
struct ifile {
char *if_fp;
struct mtext *if_mtext;
char *if_cmdline;
int if_savech;
char *if_lptr;
struct ifile *if_next;
};
struct skey {
int sk_type;
struct attribute *sk_aptr;
int sk_start;
struct skey *sk_next;
};